package July;

/**
 * @author:gao
 * @date:2020/7/10
 * @time:9:07
 * @version:0.0.1
 * @description:none
 */


//309. 最佳买卖股票时机含冷冻期
public class NaxProfit {
}


//未优化空间的
class SolutionP0 {
    public int maxProfit(int[] prices) {
        int n = prices.length;
        if(n==0||n==1)return 0;
        int[][] max = new int[n][2];
        //0表示当前没有，1表示有
        max[0][0]=0;
        max[0][1]=-prices[0];
        max[1][0]=Integer.max(max[0][0],max[0][1]+prices[1]);
        max[1][1]=Integer.max(max[0][1],max[0][0]-prices[1]);
        for(int i=2;i<n;i++){
            max[i][0]=Integer.max(max[i-1][0],max[i-1][1]+prices[i]);
            max[i][1]=Integer.max(max[i-1][1],max[i-2][0]-prices[i]);
        }
        return Integer.max(max[n-1][0],max[n-1][1]);
    }
}

//优化空间版
class SolutionP1 {
    public int maxProfit(int[] prices) {
        int n = prices.length;
        if(n==0||n==1)return 0;
        int[][] max = new int[3][2];
        //0表示当前没有，1表示有
        max[0][0]=0;
        max[0][1]=-prices[0];
        max[1][0]=Integer.max(max[0][0],max[0][1]+prices[1]);
        max[1][1]=Integer.max(max[0][1],max[0][0]-prices[1]);
        for(int i=2;i<n;i++){
            max[i%3][0]=Integer.max(max[(i-1)%3][0],max[(i-1)%3][1]+prices[i]);
            max[i%3][1]=Integer.max(max[(i-1)%3][1],max[(i-2)%3][0]-prices[i]);
        }
        return Integer.max(max[(n-1)%3][0],max[(n-1)%3][1]);
    }
}